/**
 * 用户成员对象
 */
function UserInfo() {
  this.uid 	= '';       //用户id
  this.utype	= '';		//用户类型
  this.name  	= '';		//用户名称
  this.number = '';		//号码
  this.status = '';		//状态
  this.ipAddr = '';		//ip地址
  this.subtype = '';
  this.gid    = '';		//归属群组id
  this.fid    = '';		//归属集团id
}

/**
 * 定位点位置对象
 */
function PositionInfo() {
  this.imsi  	       = '';   //终端编号
  this.loctype  	   = '';   //定位类型
  this.localtime     = '';   //定位时间

  this.longitudetype = '';   //经度类型 0/1:东经/西经
  this.longitude     = '';   //经度
  this.latitudetype  = '';   //纬度类型 0/1:南纬/北纬
  this.latitude      = '';   //纬度

  this.radius        = '';   //范围，扇区半径信息,默认值2万米
  this.speed         = '';   //终端当前速度
  this.direction     = '';   //终端当前方向
  this.status        = '';   //终端当前状态
}

/**
 * 坐标转换定义的定位点对象
 */
function GpsPosition(lng,lat) {
  this.lng = lng;
  this.lat = lat;
}

/**
 * 视频成员对象
 */
function VideoMember(){
  this.utype     = "" + MediaConstants.UTYPE_UE; //默认是UE类型
  this.uid       = '';
  this.sipCallId = '';
  this.status    = '';

  this.callStatus= MediaConstants.STATUS_INIT;

  //对应的窗口对象
  this.VideoWin  = null;
  this.name      = '';
  this.number    = '';
}

/**
 * 登录成功后，城市中心的经纬度对象
 */
function cityLngAndLat(lng,lat) {
  this.lng = lng||"118.79947";
  this.lat = lat||"32.07578";
}

/**
 * GPS定位对象
 */
function GPSLocationMember(){
  this.utype     = '';
  this.uid       = '';
  this.name      = '';
  this.number    = '';
  this.msStatus  = '';     //终端GPS状态：0、1分别表示关闭、打开
  this.reqId     = '';     //定位请求的id，连续定位应答时必选
  this.lngType   = '';     //经度类型，0：表示东经 ，1：表示西经
  this.longitude = '';     //经度
  this.latType   = '';     //纬度类型，0：表示南纬，1：表示北纬
  this.latitude  = '';     //纬度
  this.locTime   = '';     //gps位置上报时间
  this.radius    = '';     //定位误差，单位：米
  this.direction = '';     //方向(角度:0-360)
  this.velocity  = '';     //速度
  this.areaCode  = '';     //区号
  this.status    = '';     //位置状态
}

/** **存放集合** */
function List(){
  this.length       = 0;
  this.add          = add;
  this.insert       = insert;
  this.remove       = remove;
  return this;
}
// 添加方法
function add(obj){
  this[this.length]  = obj;
  this.length++;
}
// 删除方法
function remove(index){
  for(var m = index; m<this.length - 1; m++)
  {
    this[m] = this[m + 1];
  }
  this[this.length - 1] = null;
  this.length--;
}
// 插入数据
function insert(index, obj)
{
  if(index > this.length)
    return;
  if(index == this.length)
  {
    this[this.length] = obj;
    this.length++;
    return;
  }
  if(index < this.length)
  {
    for(var i = this.length; i > index; i-- )
    {
      this[i] = this[i-1];
    }
    this[index] = obj;
    this.length++;
    return;
  }
}

/**
 * Map_D对象，实现MAP功能
 *
 * 接口：
 * size()                  获取MAP元素个数
 * isEmpty()               判断MAP是否为空
 * clear()                 删除MAP所有元素
 * put(key, value)         向MAP中增加元素（key, value)
 * remove(key)             删除指定KEY的元素，成功返回true，失败返回false
 * get(key)                获取指定KEY的元素值VALUE，失败返回NULL
 * element(index)          获取指定索引的元素（使用element.key，element.value获取KEY和VALUE），失败返回NULL
 * containsKey(key)        判断MAP中是否含有指定KEY的元素
 * containsValue(value)    判断MAP中是否含有指定VALUE的元素
 * values()                获取MAP中所有VALUE的数组（ARRAY）
 * keys()                  获取MAP中所有KEY的数组（ARRAY）
 *
 * 例子：
 * var map = new Map_D();
 *
 * map.put("key", "value");
 * var val = map.get("key")
 * ……
 *
 */
//自定义的MAP,引入polyfill时，会出现冲突导致业务流程失败
function Map_D(){
  this.elements = new Array();

  //获取Map元素个数
  this.size = function() {
    return this.elements.length;
  },

    //判断Map是否为空
    this.isEmpty = function() {
      return (this.elements.length < 1);
    },

    //删除Map所有元素
    this.clear = function() {
      this.elements = new Array();
    },

    //向Map中增加元素（key, value)
    this.put = function(_key, _value) {
      if (this.containsKey(_key) == true)
      {
        if(this.remove(_key) == true)
        {
          this.elements.push({
            key : _key,
            value : _value
          });
        }
      } else {
        this.elements.push({
          key : _key,
          value : _value
        });
      }
    },

    //删除指定key的元素，成功返回true，失败返回false
    this.remove = function(_key) {
      var bln = false;
      try {
        for (i=0; i<this.elements.length; i++)
        {
          if (this.elements[i].key == _key)
          {
            this.elements.splice(i, 1);
            return true;
          }
        }
      } catch(e) {
        bln = false;
      }
      return bln;
    },

    //获取指定key的元素值value，失败返回null
    this.get = function(_key) {
      try {
        for (i=0; i<this.elements.length; i++)
        {
          if (this.elements[i].key == _key)
          {
            return this.elements[i].value;
          }
        }
      } catch(e) {
        return null;
      }
    },

    //获取指定索引的元素（使用element.key，element.value获取key和value），失败返回null
    this.element = function(_index) {
      if (_index<0 || _index>=this.elements.length)
      {
        return null;
      }
      return this.elements[_index];
    },

    //判断Map中是否含有指定key的元素
    this.containsKey = function(_key) {
      var bln = false;
      try {
        for (i=0; i<this.elements.length; i++)
        {
          if (this.elements[i].key == _key)
          {
            bln = true;
          }
        }
      } catch(e) {
        bln = false;
      }
      return bln;
    },

    //判断Map中是否含有指定value的元素
    this.containsValue = function(_value) {
      var bln = false;
      try {
        for (i=0; i<this.elements.length; i++)
        {
          if (this.elements[i].value == _value)
          {
            bln = true;
          }
        }
      } catch(e) {
        bln = false;
      }
      return bln;
    },

    //获取Map中所有key的数组（array）
    this.keys = function() {
      var arr = new Array();
      for (i=0; i<this.elements.length; i++)
      {
        arr.push(this.elements[i].key);
      }
      return arr;
    },

    //获取Map中所有value的数组（array）
    this.values = function() {
      var arr = new Array();
      for (i = 0; i < this.elements.length; i++)
      {
        arr.push(this.elements[i].value);
      }
      return arr;
    };
}

export { Map_D }
